package avicit.im.lantop.userauthset.service;

import java.util.List;
import java.util.Map;

/**
 * <p>金航数码科技有限责任公司</p>
 * <p>作者：路永刚</p>setUserAuthOperatFlag
 * <p>邮箱：luyg@avicit.com</p>
 * <p>创建时间： 2014-10-29 上午9:12:33 </p>
 * <p>类说明：用户权限应用接口定义</p>
 * <p>修改记录： </p>
 */
public interface UserAuthIntfsService {

	/**
	 * 获取可操作的按钮json串
	 * @author 路永刚 
	 * @param orgId：组织ID
	 * @param deptId：部门ID
	 * @param sysId：系统标识ID
	 * @param targetType：权限设置目标类型。1.角色(role)；2.部门(dept)；3.用户(user)；；4.岗位(job)。
	 * @param targetID：权限设置目标ID
	 * @param serverId：权限服务ID
	 * @param resCode：档案分类树节点ID
	 * @param menuCode：操作按钮所在菜单code
	 * @return：可操作的按钮json串
	 * @throws Exception String
	 */
	public String getUserAuthOperateCodesByIntfs(String orgId, String deptId, String sysId, String targetType, String targetID, String serverId, String resCode, String menuCode) throws Exception;

	/**
	 * 获取数据权限：
	 * key=1，则value为可执行的数据where过滤条件
	 * key=2，则value为可执行的条目ID串，例如：('8a58bc5d4a5b3022014a5c259c360035','8a58bc184a713f0e014a716c664c000c')
	 * @author 路永刚 
	 * @param orgId：组织ID
	 * @param deptId：部门ID
	 * @param sysId：系统标识ID
	 * @param targetType：权限设置目标类型。1.角色(role)；2.部门(dept)；3.用户(user)；；4.岗位(job)。
	 * @param targetID：权限设置目标ID
	 * @param serverId：权限服务ID-LANTOP_AUTH_SERVER_USERSET
	 * @param archiveClassId：节点ID
	 * @param archiveTableId：档案库表ID
	 * @param modelSqlWhere:模块本身的业务逻辑sql条件，包括查询条件。
	 * @return
	 * @throws Exception Map<String,String>
	 */
	public Map<String, String> getUserAuthDatasByIntfs(String orgId, String deptId, String sysId, String targetType, String targetID, String serverId, String archiveClassId, String archiveTableId, String modelSqlWhere, Map<String, Object> param) throws Exception;

	/**
	 * 用户是否设置了操作权限
	 * @author 张坚 
	 * @param orgId：组织ID
	 * @param deptId：部门ID
	 * @param sysId：系统标识ID
	 * @param targetType：权限设置目标类型。1.角色(role)；2.部门(dept)；3.用户(user)；；4.岗位(job)。
	 * @param targetID：权限设置目标ID
	 * @param serverId：权限服务ID-LANTOP_AUTH_SERVER_USERSET
	 * @param archiveClassId：节点ID
	 * @return
	 * @throws Exception boolean
	 */
	public String setUserAuthOperatFlag(String orgId, String deptId, String sysId, String targetType, String targetId, String serverId, String archiveClassId, Map<String, Object> param) throws Exception;

	/**
	 * 获取没有权限的分类树节点ID串
	 * @author 张坚 
	 * @param param 参数：orgId（组织ID）,deptId（部门ID）,sysId（系统标识ID）,targetId（授权目标ID）,targetType（授权维度标识）
	 * @return String 格式：ID1,ID2
	 * @throws Exception 
	 */
	public List<String> getNotAuthArchiveClassId(Map<String, Object> param) throws Exception;

	/**
	 * 获取对记录有查看权限的用户ID串
	 * @author 张坚 
	 * @param param : nodeId,tableId,tableName,recordId
	 * @return
	 * @throws Exception Map<String, Object>
	 */
	public Map<String, Object> getUserIdsAuthDatasByRecord(Map<String, Object> param) throws Exception;

	/**
	 * 获取对记录有查看权限的用户ID串(全文权限)
	 * @author 王志鹏  20160817 add
	 * @param param : nodeId,tableId,tableName,recordId
	 * @return
	 * @throws Exception Map<String, Object>
	 */
	public Map<String, Object> getUserIdsAuthDatasByQwByRecord(Map<String, Object> param) throws Exception;

	/**
	 * 获取附件的权限
	 * @author 张坚 
	 * @param param nodeId:节点ID,dataIds:数据ID,多个用逗号分隔;targetId:用户ID;targetType:维度，群组=1，用户=3;orgId:组织ID;sysId:系统标识ID;serverId:服务ID，兰台档案为LANTOP_AUTH_SERVER_USERSET
	 * @return
	 * @throws Exception Map<String,Object>
	 */
	public Map<String, Object> getAttachmentAuth(Map<String, Object> param) throws Exception;

	/**
	 * 保存电子文件记录权限
	 * @author 张坚 
	 * @param param 
	 * orgId（组织ID）,
	 * deptId（部门ID）,
	 * sysId（系统标识ID）,
	 * targetType:1群组、3用户
	 * targetId : 群组ID/用户ID
	 * rcdDataType : 0电子文件
	 * startDate (string yyyy-mm-dd) : 授权开始时间
	 * endDate (string yyyy-mm-dd) : 授权结束时间
	 * serviceId : LANTOP_AUTH_SERVER_USERSET
	 * dataList (ArrayList<Map<String, Object>>) 附件数据集合，{必须包含ARCHIVE_CLASS_ID ： 节点ID}{TABLE_ID ： 档案库表ID}{RES_CODE ： 附件ID}{WJH : 文件号}{TM : 题名}{ATTACH_NAME : 电子文件名称}
	 * useType : 利用类型 1.浏览  2.下载
	 * operateInfoMap : 已有权限类型，调用接口获取
	 * @throws Exception
	 */
	public void saveAttachAuthEntry(Map<String, Object> param) throws Exception;

	/**
	 * 获取已有的权限类型
	 * @author 张坚 
	 * @return
	 */
	public Map<String, String> getOperateInfo();

	/**
	 * 删除条目记录权限
	 * @param param sysId (系统标识ID),ORG_ID(组织ID),TARGET_ID(用户ID),RES_CODE(条目记录ID)
	 * @throws Exception
	 */
	public void delAttachAuthEntry(Map<String, Object> param) throws Exception;

	/**
	 * 对数据节点有权限的用户ID串
	 * @param param orgId（组织ID），sysId（系统标识ID），deptId（部门ID），nodeIds（数据节点ID串，逗号分隔，全部节点传空值），secretFlag（是否启用密级控制0,启用1,不启用），userId（当前登录用户ID），ip（当前登录用户IP地址）
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> updateSolrIndex(Map<String, Object> param) throws Exception;

	/**
	 * 获取权限过程返回的批次号（条目）
	 * @param param orgId（组织ID），sysId（系统标识ID），deptId（部门ID），nodeIds（数据节点ID串，逗号分隔，全部节点传空值），secretFlag（是否启用密级控制0,启用1,不启用），userId（当前登录用户ID），ip（当前登录用户IP地址）
	 * @return
	 * @throws Exception
	 */
	public String updateSolrIndexTm(Map<String, Object> param) throws Exception;

	/**
	 * 获取权限过程返回的批次号（全文）
	 * @param param orgId（组织ID），sysId（系统标识ID），deptId（部门ID），nodeIds（数据节点ID串，逗号分隔，全部节点传空值），secretFlag（是否启用密级控制0,启用1,不启用），userId（当前登录用户ID），ip（当前登录用户IP地址）
	 * @return
	 * @throws Exception
	 */
	public String updateSolrIndexQw(Map<String, Object> param) throws Exception;

	/**
	 * 获取我的利用可以访问的节点集合
	 * @param param orgId（组织ID），sysId（系统标识ID），userId（当前登录用户ID）
	 * @return List<Map<String, Object>> key : RES_CODE, value : nodeId
	 * @throws Exception
	 */
	public List<Map<String, Object>> getUseNodes(Map<String, Object> param) throws Exception;

	/**
	 * 根据节点ID删除权限数据
	 * @author 郭亮 
	 * 变更：20160810 接口变更 王志鹏
	 * @param param orgId（组织ID），deptId（部门ID）,sysId（系统标识ID）
	 * @param Map<String,Object> nodeIds (key："nodeId", Object:节点值)  
	 * @throws Exception void 
	 */
	public void deleteAuthByNodeIdByIntfs(String orgId, String deptId, String sysId, Map<String, Object> nodeIds) throws Exception;

	/**
	 * 获取密级权限控制信息
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public String getMjSysConfigByIntfs(Map<String, Object> param) throws Exception;

	/**
	 * 获取密级权限控制密级范围外权限信息
	 * @param param
	 * @return
	 * @throws Exception
	 */
	public String getMjCheckConfigByIntfs(Map<String, Object> param) throws Exception;

	/**
	 * 计算临时表当前批次的总数（条目）
	 * @param ide
	 * @return
	 * @throws Exception int
	 * @throws
	 */
	public int getTmtotal(String ide) throws Exception;

	/**
	 * 计算临时表当前批次的总数（全文）
	 * @param ide
	 * @return
	 * @throws Exception int
	 * @throws
	 */
	public int getQwtotal(String ide) throws Exception;

	/**
	 * 获取创建索引所需MAP（条目）
	 * @param param
	 * @return
	 * @throws Exception Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getSolrIndexMapTm(String ide, int start, int end) throws Exception;

	/**
	 * 获取创建索引所需MAP（条目）
	 * @param ide
	 * @return
	 * @throws Exception Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getSolrIndexMapQw(String ide, int start, int end) throws Exception;

	/**
	 * 删除临时表数据
	 * @param ide
	 * @param type
	 * @throws Exception void
	 * @throws
	 */
	public void deleteSolrIndexTm(String ide, String type) throws Exception;

	/**
	 * 获取用户最大密级
	 * @param userId
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String getUserMaxSecretLevel(String userId) throws Exception;

	/**
	 * 判断用户是否有当前节点或者条目或者全文的浏览权限
	 * @param param
	 * @return
	 * @throws Exception boolean
	 * @throws
	 */
	public Map<String, Object> checkUserHaveAuthByParamByIntfs(Map<String, Object> param) throws Exception;

	/**
	 * TODO (请输入方法的描述)
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String getSqlConditionByParam(Map<String, Object> param) throws Exception;

	/**
	 * 获取没有权限的分类树节点ID串
	 * @author 郭凯
	 * @param param 参数：orgId（组织ID）,deptId（部门ID）,sysId（系统标识ID）,targetId（授权目标ID）,targetType（授权维度标识）
	 * @return String 格式：ID1,ID2
	 * @throws Exception 
	 */
	public List<String> getNotAuthArchiveId(Map<String, Object> param) throws Exception;
	
	/**
	 * 获取用户有权限的模板库（tableId）信息
	 * @author 张余
	 * @param :	orgId（组织ID）
	 * @param : deptId（部门ID）
	 * @param : sysId（系统标识ID
	 * @param : param : key
	 * 						orgIdentity : 组织应用ID
	 * 						userId : 用户ID
	 * @return Map<String,Object> : key
	 * 									tableIds （List<String>）
	 * 									tableNames （List<String>）
	 * @throws Exception 
	 */
	public Map<String,Object> getAuthTableIdByUserId(String sysId,String deptId,String orgId,Map<String, Object> param) throws Exception;

	/**
	 * @Description:  获得角色维度 有 不同权限维度的节点
	 * @author youyu   
	 * @date 2019-8-28 下午2:55:22
	 * @param param
	 * 				key            value
	 * 				sysId          系统ID
	 * 				orgId          组织ID
	 * 				roleCode       角色code
	 * 				deptId         部门Id
	 * 				orgIdentity    组织应用ID
	 * 				authType       权限类型（对应通用代码：A1(条目浏览)，A2（全文浏览）,A3（全文打印）,A4（全文下载））
	 * @return
	 * @throws Exception
	 * @version 1.0
	 */
	public String getSqlConditionByRoleCode(Map<String, Object> param) throws Exception;
	
	/**
	 * @Description:  获得角色维度 有 不同权限维度的节点
	 * @author youyu   
	 * @date 2019-8-28 下午2:55:22
	 * @param param
	 * 				key            value
	 * 				sysId          系统ID
	 * 				orgId          组织ID
	 * 				roleCode       角色code
	 * 				deptId         部门Id
	 * 				orgIdentity    组织应用ID
	 * 				authType       权限类型（对应通用代码：A1(条目浏览)，A2（全文浏览）,A3（全文打印）,A4（全文下载））
	 * @return
	 * @throws Exception
	 * @version 1.0
	 */
	public Map<String,Object> getSolrConditionByRoleCode(Map<String, Object> param) throws Exception;

	/**
	 * 获取当前全宗名称
	 * @param orgId
	 * @return
	 */
	public String getOrgNamebyOrgId(String orgId);
	
	/**
	 * @Description:  获得用户ID 有 不同维度 有权限的节点
	 * @author youyu   
	 * @date 2019-9-10 下午2:55:22
	 * @param param
	 * 				key            value
	 * 				sysId          系统ID
	 * 				orgId          组织ID
	 * 				userId         用户ID
	 * 				deptId         部门Id
	 * 				orgIdentity    组织应用ID
	 * 				authType       权限类型（对应通用代码：A1(条目浏览)，A2（全文浏览）,A3（全文打印）,A4（全文下载））
	 * @return
	 * @throws Exception
	 * @version 1.0
	 */
	public List<String> getNodeListByUserId(Map<String, Object> param) throws Exception;
	
	/**
	 * @Description:  获得用户ID 有 不同维度 有权限的节点
	 * @author youyu   
	 * @date 2019-9-10 下午2:55:22
	 * @param param
	 * 				key            value
	 * 				sysId          系统ID
	 * 				orgId          组织ID
	 * 				userId         用户ID
	 * 				deptId         部门Id
	 * 				orgIdentity    组织应用ID
	 * 				authType       权限类型（对应通用代码：A1(条目浏览)，A2（全文浏览）,A3（全文打印）,A4（全文下载））
	 * @return
	 * @throws Exception
	 * @version 1.0
	 */
	public List<String> getNodeListByRoleCode(Map<String, Object> param) throws Exception;
	
	
	/**
	 * @Description:  获得用户ID 有 不同维度 有权限的节点
	 * @author youyu   
	 * @date 2019-9-10 下午2:55:22
	 * @param param
	 * 				key            value
	 * 				sysId          系统ID
	 * 				orgId          组织ID
	 * 				userId         用户ID
	 * 				deptId         部门Id
	 * 				orgIdentity    组织应用ID
	 * 				authType       权限类型（对应通用代码：A1(条目浏览)，A2（全文浏览）,A3（全文打印）,A4（全文下载））
	 * @return
	 * @throws Exception
	 * @version 1.0
	 */
	public String getNodeSqlByRoleCode(Map<String, Object> param) throws Exception;

	/**
	 * @Description:  根据用户ID 获得所属部门   不同维度 有权限的节点
	 * @author youyu   
	 * @date 2019-9-10 下午2:55:22 
	 * @param param
	 * 				key            value 
	 * 				sysId          系统ID
	 * 				orgId          组织ID
	 * 				deptId         部门Id
	 * 				orgIdentity    组织应用ID
	 * 				authType       权限类型（对应通用代码：A1(条目浏览)，A2（全文浏览）,A3（全文打印）,A4（全文下载））
	 * @return
	 * @throws Exception
	 * @version 1.0
	 */
	public List<String> getNodeListToDeptByUserId(Map<String, Object> param) throws Exception;

	Map<String, Object> getAuth(Map<String, Object> params);

	Boolean isArciveType(String userId, String nodeId,String orgId);

	Map<String, Object> isRole(String userId, String orgCode,String orgId);
	/**
	 * 判断当前用户是否有处理单权限
	 * @MethodName: authForCLD
	 * @param userId  用户id
	 * @param orgCode  全总编码
 	* @param orgId  全总id
	 * @Return: java.lang.Boolean
	 * @Author: 无量
	 * @Date: 2019/12/10 14:04
			*/
	String authForCLD(String userId, String orgCode,String orgId);
	
	 /**
     * 根据参数获取节点IDsql
     * @param param
     * @return
     * @throws Exception String
     * @throws
     */
    public String getNodeListSqlByUserId(Map<String, Object> param) throws Exception;
}
